在 Kotlin 中也有 Array 的存在
為什麼這裡我特別說這個是 物件陣列
呢,因為在 Kotlin 中有基礎型態(primitive)的陣列
,等等會介紹
arrayOfNulls<Int>(3)
可以幫我們創造出一個長度是 3 的空 Integer 陣列,內容都是 null,注意這裡會是 Integer 物件型態的整數,對應到 Java 就會是 new Integer[3]
// new Integer[3];
val aryOfNulls = arrayOfNulls<Int>(3)
如下所示 arrayOf 可以創造出我們想要的資料長度的陣列,注意 type 其實背後也都會是物件
val aryOfInt = arrayOf<Int>(1, 2, 3) // new Integer[]{1, 2, 3};
val aryOfBoolean = arrayOf<Boolean>(true, false) // new Boolean[]{true, false};
val aryOfLong = arrayOf<Long>(555L, 666L) // new Long[]{555L, 666L};
val aryOfPersonT = arrayOf<PersonT>(PersonT("tim", 123)) // new PersonT("tim", 123);
下面這個例子比較特別,並沒有指定型態,內容包含了數字,布林型態,字串,所以其實這裡用的型態就會是 Any
以 java 來說就會是 new Object
// Any type, new Object[]{100, true, "test"};
val manyTypeAry = arrayOf(100, true, "test")
還有一個特別的用法,就是在陣列後使用 lambda expression,會自動有一個 it 變數代表這個陣列的索引值,所以也就會是 0 1 2 3 4
val arrayLambda = Array<Int>(5) { // it 會是 index
it
}
arrayLambda.forEach { println(it) } // 0 1 2 3 4
因為有 8 種基礎型態,所以也有相對應的 8 種的創造方式
// 基礎型態 primitive type array
intArrayOf()
longArrayOf()
shortArrayOf()
byteArrayOf()
doubleArrayOf()
floatArrayOf()
booleanArrayOf()
charArrayOf()
下面的例子說明了如何創造基礎型態的陣列,主要就是 ArrayOf 前面多基礎型態的名稱,用法差不多
// 基礎型態 array
val intAry0 = IntArray(5) // new int[5];
val intAry1 = intArrayOf() // int[] intAry = new int[0];
val intAry2 = intArrayOf(1, 3, 4) // int[] var43 = new int[]{1, 3, 4};
val charAry = charArrayOf('a', 'd', 'e') // new char[]{'a', 'd', 'e'};
collections 其實大概都有這些方法,這裡先提一些
// 取得陣列大小
val arySize = charAry.size // 3
// 陣列是否空
charAry.isEmpty()
charAry.isNotEmpty()
// 取得最後一個元素
charAry.last() // return the last element
// 取得陣列最後一個 index
charAry.lastIndex
// 比對最後一個元素
charAry.last { it == 'e' }
// 比對所有元素
charAry.all { it == 'e' } // Returns `true` if all elements match the given
// 至少有一個元素就回傳 true
charAry.any() // return true if array has at leat one element
// 陣列中有一個某一元素符合, 就回傳 true
charAry.any { it == 'a' } // Returns `true` if at least one element matches the given
可以利用 [索引] 或 get(索引)
// get
println(charAry[1]) // 'd'
println(charAry.get(2)) // 'e'
可以利用 [索引] = xxx 或 set(索引) = xxx
當然超出索引範圍是會丟出 Exception 的
// set
charAry[2] = 'F'
println(charAry)
charAry.set(2, 'f')
println(charAry)
// charAry[3] // java.lang.ArrayIndexOutOfBoundsException: 3
一般的 for
// iterate
val dataAry = arrayOf("Tim", "Beef", "Jean")
for (d in dataAry) {
println(d)
}
dataAry.indices
是 array 的 index
for (idx in dataAry.indices) { // dataAry.indices 是 array 的 index
println(dataAry[idx])
}
dataAry.withIndex()
可以幫我們取得 index 和 value
for (d in dataAry.withIndex()) {
println("idx: ${d.index}, value: ${d.value}")
}
這裡再舉一個二維陣列的例子,用法差不多,主要是第二層的時候就會用上一層的 值
來跑回 loop
// multi dimensional array
val twoDAry = arrayOf(
arrayOf("0,0", "0,1", "0,2"),
arrayOf("1,0", "1,1", "1,2"),
arrayOf("2,0", "2,1", "2,2"),
arrayOf("3,0", "3,1", "3,2")
)
for (rowData in twoDAry.withIndex()) {
for (colData in rowData.value.withIndex()) {
println("twoDAry index:${rowData.index},${colData.index}, value is ${colData.value}")
}
}
以上就是今天的內容!謝謝大家!
今日練習的程式在這: 請點我